package com.vito.oa.act.extend.service;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import com.vito.base.authoriza.model.UserModel;
import com.vito.base.model.FtpModel;
import com.vito.base.model.MyHashMap;
import com.vito.base.model.Result;
import com.vito.oa.act.constant.OaActContants.ProcessButtonEnum;
/**
 * 流程表单处理
 * @author xuezhennan
 * 
 */
public interface OaActProgressTableService {
	/**
	 * 保存表单信息
	 * @param user 提交人
	 * @param map 提交的数据结构，包含流程信息，表单信息
	 * @return
	 */
	public int saveProgressTableInfo(UserModel user,Map<String, Map<String, Object>> map);
	/**
	 * 保存表单信息
	 * @param user
	 * @param map
	 * @param btn {@link ProcessButtonEnum}
	 * @return
	 */
	public int saveProgressTableInfo(UserModel user,Map<String, Map<String, Object>> map,ProcessButtonEnum btn);
	/**
	 * 查询当前业务、当前流程节点对应的流程、表单信息
	 * @param processKey
	 * @param processNodeId
	 * @param bussId
	 * @param taskId
	 * @return
	 */
	public MyHashMap<String, Object> queryBussInfo(String processKey,String processNodeId,String bussId,String taskId);
	/**
	 * 流程完结操作 
	 * <pre>
	 * 	1.生成流程静态页面 ;
	 * 	2.更新流程状态为：完结 ;
	 * 	3.将流程数据备份到历史表 ，并且将静态页面地址放入历史表;
	 * 	4.删除主表信息
	 * </pre>
	 * @param processKey 流程key
	 * @param businessId 流程业务编号
	 * @param endSign 流程结束时的审批状态
	 * <pre>
	 * 	1:正常通过完结
	 * 	2:拒绝完结
	 * </pre>
	 * @return
	 * @throws Exception 
	 * @throws IOException 文件上传ftp服务器出错
	 */
	public int updateProgressToEnd(String processKey,String businessId,String endSign) throws Exception;
	
	/**
	 * 查询流程节点及其对应的审批状态
	 * @param processKey
	 * @param bussId
	 * @return
	 */
	public List<MyHashMap<String, String>> findProcessView(String processKey,String bussId);
	/**
	 * 流程挂起
	 * @param user
	 * @param businessId
	 * @param processInstanceId
	 * @param isHangUp
	 * @return
	 */
	public Result hangUp(UserModel user,String businessId,String processInstanceId, boolean isHangUp);
	/**
	 * 完结流程
	 * @param user
	 * @param map
	 * @return
	 */
	public Result endProcess(UserModel user,Map<String, Map<String, Object>> map);
	/**
	 * 查询完结流程
	 * @param url 完结数据的保存路径
	 * @return
	 */
	Map<String, Object> queryOverInfoSingle(String url);
	/**
	 * 批量查询完结流程
	 * @param ftps
	 * @return
	 */
	List<Map<String, Object>> queryOverInfoList(List<FtpModel> ftps);
	
	public List<MyHashMap<String, String>> queryBussNeedCols(String processKey,String processNodeId);
	//查询流程处理过程数据
	public List<MyHashMap<String, String>> findProcessData(String processKey,String bussId);
	public int updateInstanceByBussId(String businessId,String instanceId);
}



